package cn.suchan.jianzhi.q47_sequence;

/**
 * 知识点：求1+2+3+...+n
 * 题目描述
 * 求1+2+3+...+n，要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句（A?B:C）。
 *
 * @author suchan
 * @date 2019/06/07
 */
public class Solution {

    /**
     * 使用等差数列前n项和公式：Sn = n * a1 + (n * (n - 1) * d) / 2；
     * 已知首项a1 = 1,公差d = 1，尾项an = 项数n = n，则：
     * Sn = (n^2 + n) / 2
     * 由于题目中要求不能使用乘除法，所以次方使用Math.pow()，而除以2则可用右移一位来表示
     *
     * @param n
     * @return
     */
    public int Sum_Solution(int n) {
        return (int) (Math.pow(n, 2) + n) >> 1;
    }

    /**
     * 使用递归的方式
     *
     * @param n
     * @return
     */
    public int Sum_Solution1(int n) {
        return plus(0, n);
    }

    public int plus(int sum, int n) {
        sum += n;
        boolean is_end = (n > 0) && ((sum = plus(sum, --n)) > 0);
        return sum;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.Sum_Solution1(10));
    }
}
